﻿/*
Las librerias asp.net.mvc son desarrolladas bajo la siguiente convención:
[subdominio]/{controller}/{action}/[id]
0             1           2      3

subdominio: Es opcional y depende como se aloca la aplicación web. 
Ejemplos: 
1) wwww.ktudu.com.ar/NombreSubdominio/{controller}/{action}/[id]
2) wwww.ktudu.com.ar/{controller}/{action}/[id]

Ya que por convención determina:
1) Si el pathname tiene 4 ítems significa que hay un subdominio y un parametro.
2) Si el pathname tiene 3 ítems tiene subdominio y no tiene parámetro o no tiene subdominio y tiene parámetro.
3) Si el pathname tiene 2 ítems no tiene subdominio ni parámetro.

*/

function GetActionUrl(action, parameters, controller) {
    /// <summary>Obtiene la url completa para la action.</summary>

    var paths = window.location.pathname.substring(1).split("/"); // obtengo los distintos ítems del pathname

    controller = controller || getController(paths); // se establece la vista especificada, caso contrario se determina la vista segun el pathname
    var url = getSubdomain(paths) + '/' + controller + '/' + action;

    if (parameters != undefined) {
        // si hay un solo parametro y el path no es un queryString ('?'), se envia el parametro con formato '\{parameter}'
        if ((!$.isArray(parameters) || parameters.length == 1) && url.lastIndexOf('?') == -1) {
            var parameter = parameters;
            // si es un array le asigno el primer elemento
            if ($.isArray(parameters))
                parameter = parameters[0];

            url += "/" + parameter;
        } else {
            url = url.format(parameters);
        }
    }

    return url;
}

function getSubdomain(paths) {
    ///<summary>Obtiene, si lo hubiere, el subdominio de una url con el formato [subdominio]/{controller}/{action}/[id]</summary>

    if (paths.length == 4) {
        return '/' + paths[0];
    }
    else if (paths.length == 3) {
        // si el ultimo parametro es un numero la url es {controller}/{action}/[id]
        if (!isNaN(paths[2])) {
            return ''; // no hay subdominio
        } else { // sino es un numero la url es [subdominio]/{controller}/{action}
            return '/' + paths[0];
        }
    }
    else {
        return ''; // no hay subdominio
    }
}

function getController(paths) {
    ///<summary>Obtiene la vista de una url con el formato [subdominio]/{controller}/{action}/[id]</summary>
    if (paths.length == 2) {
        return paths[0];
    }
    else if (paths.length == 3) {
        // si el ultimo parametro es un numero la url es {controller}/{action}/[id]
        if (!isNaN(paths[2])) {
            return paths[0];
        } else { // sino es un numero la url es [subdominio]/{controller}/{action}
            return paths[1];
        }
    }
    else if (paths.length == 4) {
        return paths[1];
    } else {
        return paths[0];
    }
}
